package org.zk.dao;

import org.zk.entity.Goods;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface GoodsMapper {

    /**
     * 查询所有商品
     */
    public List<Goods> selectAllGoods();

    /**
     * 首页商品
     * 查询分类下的商品（每个分类6个）
     * @return
     */
    public List<Goods> selectSixGoodsByCatelog(@Param("catelogId") Integer catelogId);

    /**
     * 获取某个分类的条数
     * @return
     */
    public Integer getCountByCateId(@Param("catelogId") Integer catelogId);

    /**
     * 根据分类和页码查询商品
     * @param cateId
     * @param start
     * @param limitValue
     * @return
     */
    public List<Goods> selectGoodsByCatelog(@Param("cateId") Integer cateId, @Param("start") Integer start, @Param("limitValue") Integer limitValue);


    /**
     * 通过商品id查询商品(status = 1 表示商品未下架)
     * @param goodsId
     * @return
     */
    public Goods selectGoodsByGid(Integer goodsId);


    /**
     * 不管状态
     * 为订单服务
     * @param goodsId
     * @return
     */
    public Goods selectGoodsByGidWithoutStatus(Integer goodsId);

    /**
     * 添加商品
     * @param goods
     * @return
     */
    public Integer insertGoods(Goods goods);

    /**
     * 根据用户id查询其关注的商品
     * @param uid
     * @return
     */
    public List<Goods> selectFocusGoodsesByUid(Integer uid);

    /**
     * 通过商品名和描述查找商品
     * @param goodsInfo
     * @return
     */
    public List<Goods> selectGoodsByNameOrDesc(@Param("goodsInfo") String goodsInfo, @Param("start") Integer start, @Param("limitValue") Integer limitValue);

    /**
     * 通过商品名和描述查找商品的数量
     * @param goodsInfo
     * @return
     */
    public Integer selectCountGoodsByNameOrDesc(String goodsInfo);

    /**
     * 通过用户查找其发布的商品
     * @param userId
     * @return
     */
    public List<Goods> selectGoodsesByUid(Integer userId);

    /**
     * 修改下架时间 和设置商品状态值
     * @param goodsId
     * @param endTime
     * @return
     */
    Integer updateEndTimeAndStatusByGid(@Param("goodsId") Integer goodsId, @Param("endTime") String endTime);


    /**
     * 删除订单
     * @param goodsId
     * @return
     */
    Integer delGoods(@Param("goodsId") Integer goodsId);
}
